[email protected]: Permission denied (publickey). となったので解消方法を調査した
コーヒーが好きな emi です。
GitHub に SSH 接続するために SSH キーを作成して登録しました。
パスフレーズをいちいち入力しなくてもいいように ssh-agent を有効化してから GitHub に接続できるか確認したところ、[email protected]: Permission denied (publickey).
となってしまったので、原因を調査しました。
前提
以下の環境で操作しています。
- Windows 11
- Git for Windows をインストールし Git Bash を使用
発生したエラー
ssh -T [email protected]
コマンドを使って SSH 経由で GitHub のサーバーに接続し、ユーザーアカウントが正しく認証されているかどうかを確認しようとしたところ、以下のようにエラーになりました。
$ ssh -T [email protected] no such identity: /c/home/.ssh/XXX-key\343\200\200#\347\247\230\345\257\206\351\215\265\343\201\256\343\203\221\343\202\271\343\202\222\345\205\245\345\212\233: No such file or directory [email protected]: Permission denied (publickey).
~/.ssh
ディレクトリ配下に XXX-key
という名前の秘密鍵を置いていたのですが、2 行目で謎の数字が羅列され No such file or directory
と表示されています。このエラーから、なんとなく「キーの名前の後ろに全角入っちゃってそうだな」と予想しました。
結論
原因は予想通り ~/.ssh
配下に作成した config ファイルに全角スペースが含まれているのが原因でした。凡ミス…。
# Githubの設定 ### XXX-key設定 # - - - - - - - - - - - - Host github.com User git Port 22 Hostname github.com PreferredAuthentications publickey IdentityFile ~/.ssh/XXX-key□#秘密鍵のパスを入力 TCPKeepAlive yes IdentitiesOnly yes
コメントを入力したときに全角になってしまったようです。日本語のコメントはわかりやすいですが、こういったミスが起きやすいので注意しないといけないですね。
config ファイルを修正してもう一度 ssh -T [email protected]
を実行すると、無事接続を確認できました。
$ ssh -T [email protected] Hi emi-ki! You've successfully authenticated, but GitHub does not provide shell access.
もう少し詳細
GitHub との接続を確認する際に実行した ssh -T [email protected]
というコマンドには、以下のオプションが含まれています。
-T
:SSH 接続を介して実行するコマンドがないことを示していて、認証や接続の確認を行う場合に使用されます。[email protected]
:SSH 経由で接続するリモートシステムのアドレスを指定しています。git
は GitHub への接続に使われるユーザーアカウント名、github.com
は接続するリモートホストのアドレスを指定しています。
Permission denied (publickey).
となった場合、一般的に以下のような要因が考えられます。当てはまるものがないか確認してみてください。
- sudo コマンドまたは管理者特権を使用していないか
- sudo を使用せずに SSH キーを生成して
sudo git push
のようなコマンドを使用しようとすると、生成したものと同じキーが使用されないためエラーになります。
- sudo を使用せずに SSH キーを生成して
- 正しいサーバーに接続していることを確認する
- 「githib.com」や「guthub.com」になっていないか確認してみてください。
- 常に「git」ユーザを使用する
- リモート URL 向けを含むすべての接続は、「git」ユーザとして行われます。
- 接続に使用する SSH キーが存在することを確認する
- 公開鍵が GitHub アカウントに設定されていることを確認する